package com.hyt.it.ogt.kq.service.bm.service;

import java.util.List;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.common.config.exception.InvalidRequestException;
import com.hyt.it.ogt.kq.service.bm.api.model.PtBmProjectVO;
import com.hyt.it.ogt.kq.service.bm.model.dto.ProjectNodeDTO;
import com.hyt.it.ogt.kq.service.bm.model.dto.ProjectNodeListDTO;
import com.hyt.it.ogt.kq.service.bm.model.entity.Project;
import com.hyt.it.ogt.kq.service.bm.model.entity.ProjectNode;
import com.hyt.it.ogt.kq.service.bm.model.param.ProjectNodeBaseProjectParam;
import com.hyt.it.ogt.kq.service.bm.model.param.ProjectNodeCollectInfoParam;
import com.hyt.it.ogt.kq.service.bm.model.param.ProjectNodeParam;
import com.hyt.it.ogt.kq.service.bm.model.param.ProjectNodeSubjectParam;
import com.hyt.it.ogt.kq.service.bm.model.vo.ProjectNodeVo;

/**
 * 项目优化配置
 *
 * @Description:
 * @Author: STARF
 * @CreateDate: 2022/03/02 15:00
 **/
public interface IProject2Service extends IService<Project> {

    Integer updateProjectBaseInfo(Project project);

    Integer verifyProjectDate(Project project);

    Integer setProjectNode(ProjectNodeListDTO listDTO);

    List<ProjectNodeVo> queryProjectNode(String projectId);

    Integer activeNode(ProjectNodeDTO dto);

    Integer setProjectPay(Project project);

    Integer setProjectAdmissionTime(Project project);

    Integer setNotice(ProjectNodeDTO dto);

    void updatePosterUrl();

    ProjectNode getProjectNotice(String projectId) throws InvalidRequestException;

    List<PtBmProjectVO> ptQueryProjectNameList(String officeId, String projectName);

    List<PtBmProjectVO> ptQueryProjectInfo(String projectId);

    List<PtBmProjectVO> ptQueryProjectList(String officeId, String projectName);

    Page<PtBmProjectVO> ptGetProjectPage(PtBmProjectVO vo);

    Boolean ptBangProject(String projectId, Integer bangFlag);

    /**
     * 添加报名项目基础数据
     *
     * @param param
     * @return
     */
    String saveBaseProject(ProjectNodeBaseProjectParam param);

    /**
     * 编辑报名项目基础数据
     *
     * @param param
     * @return
     */
    String editBaseProject(ProjectNodeBaseProjectParam param);

    /**
     * 保存报名流程节点数据
     *
     * @param param
     * @return
     */
    String saveProjectNode(ProjectNodeParam param);

    /**
     * 保存报名采集数据
     *
     * @param param
     * @return
     */
    String saveProjectCollect(ProjectNodeCollectInfoParam param);

    /**
     * 新增报名科目数据
     *
     * @param param
     * @return
     */
    String saveProjectSubject(ProjectNodeSubjectParam param);

    /**
     * 临时报名转正
     *
     * @param projectId
     * @return
     */
    String projectTempToMain(String projectId);
}
